/**
 * 自定义select组件
 * by zhangxinyue
 * create 2020-08-29
 */
import React, { Component } from 'react';
import _ from 'lodash';
import PropTypes from 'prop-types';
import { SelectC } from '../../../../comps';
class structureC extends Component {
  // props默认值
  static defaultProps = {
    title: '', // 下拉框名称，默认为空（无名称）
    helper: '', // 下拉框提示信息，默认无提示信息
    allowClear: false, // 是否展示“删除”按钮，默认不展示
    placeholder: '请选择', // 占位符，默认为“请选择”
    onChange: () => {}, // 选择内容变化时的回调，默认不执行回调
    loading: false, // 等待状态，默认为非等待状态
    dataSource: [], // 下拉框数据源，默认无数据
    showSearch: true, // 单选模式下可搜索
    onRef: () => {}, // 本组件的引用
    formItemLayout: FormItemLayout, // 布局
    rules: [], // 校验规则
    selectWidth: '', // 输入框长度
    disabled: false, // 默认启用
    isMultiple: false, // 默认单选
    maxTagCount: 0, // 默认多选时显示一个标签，多余的缩率
    filterOption: true, //默认根据输入项对现有下拉选项进行筛选
    optionTitle: false, //默认不悬浮显示option选项的title
  };

  constructor(props) {
    super(props);
    this.state = {};
  }

  componentDidMount() {
    // 父组件对本组件的引用
    this.props.onRef(this);
  }

  // 非初始化状态下更改下拉选项(供父组件调用)
  setSelect = (value) => {
    const valueF = {};
    valueF[this.props.dataIndex] = value ? value.toString() : '';
    this.props.form.setFieldsValue(valueF);
  };

  // 响应下拉变更事件
  onChange = (e) => {
    this.props.onChange(e);
  };

  render() {
    const {
      form,
      title,
      dataIndex,
      initialValue,
      helper,
      allowClear,
      placeholder,
      loading,
      dropdownMatchSelectWidth,
      dropdownStyle,
      showSearch,
      dataSource,
      style,
      isMultiple,
      maxTagCount,
      formItemLayout,
      onSearch,
      filterOption,
      optionTitle,
    } = this.props;
    return (
      <div style={{ height: '39px', marginBottom: '10px' }}>
        <SelectC
          dataIndex='structure'
          form={this.props.form}
          dataSource={ds1}
          initialValue={dataSource.structure}
          onChange={this.structChange}
          style={{ width: '100%', height: '39px' }}
        />
      </div>
    );
  }
}

// props类型
structureC.propsTypes = {
  form: PropTypes.object, // form对象
  title: PropTypes.string, // 显示名称
  dataIndex: PropTypes.string, // Form识别的Item ID
  initialValue: PropTypes.oneOfType([
    // 初始值
    PropTypes.string,
    PropTypes.number,
  ]),
  helper: PropTypes.oneOfType([
    // 提示帮助信息
    PropTypes.string,
    PropTypes.element,
  ]),
  allowClear: PropTypes.bool, // 支持清除
  placeholder: PropTypes.string, // 占位符
  onChange: PropTypes.func,
  onSearch: PropTypes.func, // 输入框内容变化时的回调
  loading: PropTypes.bool, // 加载中状态(当displayData为空时该状态才有效)
  dataSource: PropTypes.array, // 数据源 {[value:value,title:title],[],...},若有禁用情况，设置disabled为true，默认不禁用
  dropdownMatchSelectWidth: PropTypes.bool, // 下拉菜单和选择器同宽
  dropdownStyle: PropTypes.object, // 下拉菜单的 style 属性
  showSearch: PropTypes.bool, // 使单选模式可搜索
  style: PropTypes.object, // 样式
  onRef: PropTypes.func, // 本组件的引用（可用来父组件调用内部方法）
  rules: PropTypes.array, // 校验规则
  formItemLayout: PropTypes.object, // 布局
  selectWidth: PropTypes.string, // 输入框长度
  disabled: PropTypes.bool, // 是否禁用
  isMultiple: PropTypes.bool, // 是否多选
  maxTagCount: PropTypes.number, // 多选时，可以最多显示多少tag（isMultiple为true时有效）
  filterOption: PropTypes.oneOfType([
    // 是否根据输入项对现有下拉选项进行筛选，也可以传入函数当其为一个函数时，会接收 inputValue option 两个参数，当 option 符合筛选条件时，应返回 true，反之则返回 false
    PropTypes.bool,
    PropTypes.func,
  ]),
  optionTitle: PropTypes.bool, // 是否需要显示选中该 Option 后，Select 的 title
};

export default structureC;
